package com.apimarket.config.shiro;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

/**
 * @Description:自定义的Realm程序
 * 自定义的Realm程序需要继承AuthorizingRealm抽象类
 * Realm是shiro连接数据的桥梁，负责从数据层获取业务数据
 * @Author ZXR
 * @Date 2021/7/19 9:54
 * @Version 1.0
 */
public class UserRealm extends AuthorizingRealm {
    /**
     * 执行授权逻辑
     * 该方法主要用于当前登录用户授权
     * （实现该方法时只是进行了当前登录用户的角色与权限初始化，至于授权判断估计shiro帮我们做了)
     * @param principals
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        return null;
    }

    /**
     * 执行认证逻辑
     * 调用currUser.login(token)方法时会调用doGetAuthenticationInfo方法，
     * 作者小白重写该方法的主要内容是根据提交的用户名与密码到数据库进行匹配，
     * 如果匹配到了就返回一个AuthenticationInfo对象否则返回null，
     * 同样shiro会帮我们进行判断当返回null的时候会抛出一个异常，开发者可根据该异常进行相应的逻辑处理
     * @param token
     * @return
     * @throws AuthenticationException
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        return null;
    }
}
